前陣子在求職的時候常常被問到 k8s 相關的問題,觀測的指標有哪些,但我總是一問三不知,只能說出查看 log 有沒有 error。面試結束後我拼命去查相關的資料,雖然對於 Grafana、SLO 這些名詞有一定的了解,但具體該怎麼用卻沒有很清楚,監控和可觀測性的差別到底是什麼,始終搞不清楚。
在這個 vibe coding 的年代,人人都是開發者,寫程式已經是寫程式中最沒有難度的一塊。只要一直按 yes,程式就會一直不停自己長出來。但我覺得現在開發還是會出現一些說不上是新問題的問題,這些問題一直存在,且困擾著大家,只是現在能夠了解並回答我覺得才是真正有價值的事情。第一個是功能是否真的符合使用者的需求,常常加入了許多酷炫的功能,卻沒有實際解決痛點。你自己會想用自己開發出來的 app 嗎?這是一個很多人要面對的問題。
再來是我們要怎麼監控我們的系統,當開發的系統越來越大,甚至要部署到雲端給更多人使用,往往會產生一種失去掌控的感覺,哪個元件是瓶頸,造成了請求的回應慢了 1 秒,要怎麼監測這點,並進一步的去改善,這點是個人開發者常常會忽略的點。
第一個問題要交給專業的 PM 和詳細的訪談來解決,我想要用 30 天的時間去講清楚第二個問題,在系統中的監控和可觀測性是什麼,我們用筆電開一個 Kubernetes 叢集,並在其中埋下錯誤,接著透過 Prometheus、Grafana、Loki、OpenTelemetry 等工具來一一抓出其中的錯誤,實際了解其用法與監控在系統中的重要性。最後,打造一個 Agent,我們也會用這個方式來拆解該如何觀測 Agent 的工作情形。
| 天數 | 區塊 | 這幾天要回答什麼 |
|---|---|---|
| Day 1–4 | 為什麼 | SLI、SLO 與 Error Budget,以及三大支柱(metrics / logs / traces)各自能回答哪一種問題 |
| Day 5–8 | 地基 | 用 kind 在筆電開叢集、部署示範服務 |
| Day 9–12 | Metrics | Prometheus Operator、Grafana、PromQL |
| Day 13–15 | Logs | 結構化日誌與 Loki |
| Day 16–19 | Traces | OpenTelemetry 與 Collector |
| Day 20–23 | 告警 | 好告警的三個條件、Alertmanager 路由與抑制 |
| Day 24–26 | Agent | 建 agent 用前面學到的工具進行監控 |
| Day 27–30 | IaC | 使用 Terraform 與 Helm Day 30 砍掉整個叢集重建一次當驗收 |
前面我們會一起建立一個故意埋下錯誤的叢集,並利用我們後面學到的工具,逐個故障抓出來。三個故障分別要用log、trace和告警才抓的出來。最後示範agent也可以使用工具來進行觀測。
這是我第一次寫文章,有些工具我也是第一次使用,在寫文章的同時學習,如果有錯誤的話歡迎大家指出來,這樣之後閱讀文章的人也會更加的清楚,不會在網路上留下錯誤的資訊,謝謝大家。
接下來day2我們會從SLI、SLO還有 Error Budget 開始講起,在決定要裝什麼之前,先決定要看什麼。